package com.hui.dead;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.UUID;

@Component
public class MailProducer {
    public static final Logger logger = LoggerFactory.getLogger(MailProducer.class);

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String message = "dead " + new Date();
        logger.info("message:{}", message);
        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
//        声明消息处理器  这个对消息进行处理  可以设置一些参数   对消息进行一些定制化处理   我们这里  来设置消息的编码  以及消息的过期时间  因为在.net 以及其他版本过期时间不一致   这里的时间毫秒值 为字符串
        MessagePostProcessor messagePostProcessor = msg -> {
            MessageProperties messageProperties = msg.getMessageProperties();
//            设置编码
            messageProperties.setContentEncoding("utf-8");
//            设置过期时间10*1000毫秒
            messageProperties.setExpiration("10000");
            return msg;
        };
//         向DL_QUEUE 发送消息  10*1000毫秒后过期 形成死信
//        rabbitTemplate.convertAndSend(DeadRabbitConfig.DEAD_LETTER_EXCHANGE, DeadRabbitConfig.DEAD_ROUTING_KEY, message, messagePostProcessor);
        rabbitTemplate.convertAndSend(DeadRabbitConfig.MAIL_ROUTING, message);
        logger.info("队列发送成功");
    }
}
